package cn.com.hp.feature.util;

import lombok.extern.slf4j.Slf4j;
import org.apache.commons.codec.digest.DigestUtils;
import org.springframework.web.multipart.MultipartFile;

import java.io.File;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;

/**
 * @Date 2022/3/28 11:39
 */
@Slf4j
public class FileUtils {

    private static SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");

    /**
     * 文件上传
     * @param multipartFile
     * @param path
     * @return
     * @throws IllegalStateException
     * @throws IOException
     */
    public static String uploadFile(MultipartFile multipartFile, String path) throws IllegalStateException, IOException {
        String filePath = "";
        //文件源名字
        String originalFilename = multipartFile.getOriginalFilename();
        long fileSize = multipartFile.getSize();
        log.info("文件大小==="+fileSize);
        if (fileSize > (100 * 1024 * 1024)) {
            return "文件超过100MB"; //超过100MB
        }
        log.info("originalFilename====="+originalFilename);
        String[] strings = originalFilename.split("\\.");
        //md5转码作为文件名
        String fileName = DigestUtils.md5Hex(strings[0] + System.currentTimeMillis());
        log.info("加密之后的fileName====="+fileName);
        String fileType = "txt";
        if(strings.length > 1) {
            fileType = strings[1];
        }
        // 转存文件
        filePath = "/" + sdf.format(new Date()) + "/" + fileName + "." + fileType;
        log.info("开始创建文件路径====");

        if(!createFile(path + filePath)){
            throw new IOException("创建文件失败");
        }
        System.out.println("文件路径===="+path + filePath);
        File file = new File(path + filePath);
        multipartFile.transferTo(file);
        log.info("创建成功之后的文件可下载路径filePath===="+filePath);
        return filePath;
    }

    /**
     * 创建文件目录
     * @param destFileName
     * @return
     */
    public static synchronized boolean createFile(String destFileName) {
        File file = new File(destFileName);
        if(file.exists()) {
            log.info("createFile fail===");
            //失败，目标文件已存在！
            return false;
        }
        if (destFileName.endsWith(File.separator)) {
            //失败，目标文件不能为目录！
            return false;
        }
        //判断目标文件所在的目录是否存在
        if(!file.getParentFile().exists()) {
            //如果目标文件所在的目录不存在，则创建父目录
            //目标文件所在目录不存在，准备创建它！
            if(!file.getParentFile().mkdirs()) {
                //创建目标文件所在目录失败！
                return false;
            }
        }
        //创建目标文件
        try {
            if (file.createNewFile()) {
                log.info("createFile success===");
                //成功！
                return true;
            } else {
                //失败！
                return false;
            }
        } catch (IOException e) {
            e.printStackTrace();
            return false;
        }
    }


}
